package edu.server.dominio;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import edu.server.repositorio.MedidasVariablesEstandar;
import edu.server.repositorio.Producto;
import edu.server.util.HibernateUtil;

public class D_MedidaVariableEstandarProducto {
	
	public D_MedidaVariableEstandarProducto()
	{
		
	}

	/**
	 * Método que guarda en la base de datos una lista de medidas variables estándar para un producto determinado.
	 * @param medidas. Medidas variables estándar de producto a guardar.
	 */
	public void registrarMedidasVariablesEstandar(List<MedidasVariablesEstandar> medidas)
	{
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		try
		{
			session.beginTransaction();
			
			for(MedidasVariablesEstandar medida : medidas)
				session.save(medida);
			
			session.getTransaction().commit();
		}
		
		catch(HibernateException he)
		{
			session.getTransaction().rollback();
			throw he;
		}
	}
	
	
	/**
	 * Método que elimina todas las medidas variables estándar de un producto.
	 */
	@SuppressWarnings("unchecked")
	public void eliminarMedidasVariablesEstandar(Producto producto)
	{
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		List<MedidasVariablesEstandar> medidas;

		try
		{
			session.beginTransaction();
			
			Criteria criteria = session.createCriteria(MedidasVariablesEstandar.class);
			
			criteria.add(Restrictions.eq("producto", producto));
			
			medidas = criteria.list(); 
					
			for(MedidasVariablesEstandar medida : medidas)
				session.delete(medida);
			
			session.getTransaction().commit();
		}
		
		catch(HibernateException he)
		{
			session.getTransaction().rollback();
			throw he;
		}
	}
}
